<?php declare(strict_types=1);

use support\Log;
use support\Request;
use app\process\Http;

global $argv;

$processes = [
    'server' => [
        'handler' => Http::class,
        'listen' => 'http://0.0.0.0:8000',
        'count' => yaml('app.http_process_count', cpu_count() * 4),
        'user' => '',
        'group' => '',
        'reusePort' => false,
        'eventLoop' => '',
        'context' => [],
        'constructor' => [
            'requestClass' => Request::class,
            'logger' => Log::channel('default'),
            'appPath' => app_path(),
            'publicPath' => public_path()
        ]
    ]
];

if (yaml('app.monitor', false) === true) {
    $processes += [
        // File update detection and automatic reload
        'monitor' => [
            'handler' => app\process\Monitor::class,
            'reloadable' => false,
            'constructor' => [
                // Monitor these directories
                'monitorDir' => array_merge([
                    app_path(),
                    config_path(),
                    base_path() . '/process',
                    base_path() . '/support',
                    base_path() . '/resource',
                    base_path() . '/.env',
                ], glob(base_path() . '/plugin/*/app'), glob(base_path() . '/plugin/*/config'), glob(base_path() . '/plugin/*/api')),
                // Files with these suffixes will be monitored
                'monitorExtensions' => [
                    'php', 'html', 'htm', 'env'
                ],
                'options' => [
                    'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
                    'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
                ]
            ]
        ]
    ];
}

return $processes;
